package cn.xxluckey;

import cn.xxluckey.util.PacketUtil;

public class TestPacket {
    public static void main(String[] args) {
        // 样例报文数据
        short sequenceNumber = 0; // 序列号
        byte encryptionFlag = 0x00; // 不加密
        byte frameType = 0x01; // 帧类型
        byte[] payload = new byte[]{
                (byte) 0x02, // 充电枪数量
                (byte) 0x0F, // 通信协议版本
                (byte) 0x56, 0x34, 0x2E, 0x31, 0x32, 0x35, 0x33, 0x00, // 程序版本: "v4.1.50"
                0x01, // 网络连接类型
                (byte) 0x55, (byte) 0xAA, 0x04, // SIM卡数据和运营商信息
        };

        // 封包
        byte[] packet = PacketUtil.pack(sequenceNumber, encryptionFlag, frameType, payload);
        System.out.println("封装后的数据包: " + bytesToHex(packet));

        // 拆包
        PacketUtil.UnpackedData unpackedData = PacketUtil.unpack(packet);
        System.out.println("解包后的数据:");
        System.out.println("序列号: " + unpackedData.getSequenceNumber());
        System.out.println("加密标志: " + unpackedData.getEncryptionFlag());
        System.out.println("帧类型: " + unpackedData.getFrameType());
        System.out.println("消息体: " + bytesToHex(unpackedData.getPayload()));
    }

    /**
     * 字节数组转换为十六进制字符串
     * @param bytes
     * @return
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X ", b));
        }
        return sb.toString().trim();
    }
}
